package br.com.livro.javapersistence.heranca.model;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import br.com.livro.javapersistence.commons.model.CommonField;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Solicitacao {

	@Id
	@GeneratedValue
	@Column
	private Long solicitacaoId;

	@Column(nullable = false)
	private Integer quantidade;

	@Embedded
	private CommonField commonField;

	@ManyToOne(optional = false, fetch = FetchType.EAGER,cascade ={
			CascadeType.MERGE,
			CascadeType.PERSIST,
			CascadeType.REFRESH
	})
	@JoinColumn(name = "solicitanteId", nullable = false)
	private Pessoa solicitante;

	@Column(nullable = false)
	private Double valorTotal;

	/**
	 * 
	 */
	public Solicitacao() {
	}

	/**
	 * @param commonField
	 * @param quantidade
	 * @param solicitante
	 * @param valorTotal
	 */
	public Solicitacao(CommonField commonField, Integer quantidade, Pessoa solicitante, Double valorTotal) {
		this.setCommonField(commonField);
		this.setQuantidade(quantidade);
		this.setSolicitante(solicitante);
		this.setValorTotal(valorTotal);
	}

	public Long getSolicitacaoId() {
		return solicitacaoId;
	}

	public void setSolicitacaoId(Long solicitacaoId) {
		this.solicitacaoId = solicitacaoId;
	}

	public Integer getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}

	public Pessoa getSolicitante() {
		return solicitante;
	}

	public void setSolicitante(Pessoa solicitante) {
		this.solicitante = solicitante;
	}

	public CommonField getCommonField() {
		return commonField;
	}

	public void setCommonField(CommonField commonField) {
		this.commonField = commonField;
	}

	public Double getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(Double valorTotal) {
		this.valorTotal = valorTotal;
	}
}
